home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / gtlayout-source.lha / LTP_FillMenu.c < prev    next >
C/C++ Source or Header  |  1996-03-18  |  2KB  |  117 lines

  1. /*
  2. **    GadTools layout toolkit
  3. **
  4. **    Copyright © 1993-1996 by Olaf `Olsen' Barthel
  5. **        Freely distributable.
  6. **
  7. **    :ts=4
  8. */
  9.  
  10. #ifndef _GTLAYOUT_GLOBAL_H
  11. #include "gtlayout_global.h"
  12. #endif
  13.  
  14. #ifdef DO_MENUS
  15.  
  16.     /* LTP_FillSub(struct MenuItem *Item):
  17.      *
  18.      *    Fill in the submenu item IDs.
  19.      */
  20.  
  21. VOID
  22. LTP_FillSub(ULONG MenuID,ULONG ItemID,struct MenuItem *Item)
  23. {
  24.     ULONG             Count = 0;
  25.     ItemNode        *Node;
  26.     struct MenuItem    *First = Item;
  27.  
  28.     do
  29.     {
  30.         Node = (ItemNode *)((ULONG)Item - sizeof(struct MinNode));
  31.  
  32.         Node->MenuCode = FULLMENUNUM(MenuID,ItemID,Count);
  33.  
  34.         if(Item->MutualExclude && (Item->Flags & CHECKED))
  35.         {
  36.             struct MenuItem    *This        = First;
  37.             ULONG             Exclude    = Item->MutualExclude;
  38.             LONG             i;
  39.  
  40.             for(i = 0 ; i < 32 && This ; i++, This = This->NextItem)
  41.             {
  42.                 if(This != Item && (This->Flags & CHECKIT) && (Exclude & (1L << i)))
  43.                     This->Flags &= ~CHECKED;
  44.             }
  45.         }
  46.  
  47.         Count++;
  48.     }
  49.     while(Item = Item->NextItem);
  50. }
  51.  
  52.     /* FillItem(struct MenuItem *Item):
  53.      *
  54.      *    Fill in the menu item IDs.
  55.      */
  56.  
  57. VOID
  58. LTP_FillItem(ULONG MenuID,struct MenuItem *Item)
  59. {
  60.     ULONG             Count = 0;
  61.     ItemNode        *Node;
  62.     struct MenuItem    *First = Item;
  63.  
  64.     do
  65.     {
  66.         Node = (ItemNode *)((ULONG)Item - sizeof(struct MinNode));
  67.  
  68.         Node->MenuCode = FULLMENUNUM(MenuID,Count,NOSUB);
  69.  
  70.         if(Item->SubItem)
  71.             LTP_FillSub(MenuID,Count,Item->SubItem);
  72.  
  73.         if(Item->MutualExclude && (Item->Flags & CHECKED))
  74.         {
  75.             struct MenuItem    *This        = First;
  76.             ULONG             Exclude    = Item->MutualExclude;
  77.             LONG             i;
  78.  
  79.             for(i = 0 ; i < 32 && This ; i++, This = This->NextItem)
  80.             {
  81.                 if(This != Item && (This->Flags & CHECKIT) && (Exclude & (1L << i)))
  82.                     This->Flags &= ~CHECKED;
  83.             }
  84.         }
  85.  
  86.         Count++;
  87.     }
  88.     while(Item = Item->NextItem);
  89. }
  90.  
  91.     /* LTP_FillMenu(struct Menu *Menu):
  92.      *
  93.      *    Fill in the menu IDs.
  94.      */
  95.  
  96. VOID
  97. LTP_FillMenu(struct Menu *Menu)
  98. {
  99.     ULONG         Count = 0;
  100.     MenuNode    *Node;
  101.  
  102.     do
  103.     {
  104.         Node = (MenuNode *)((ULONG)Menu - sizeof(struct MinNode));
  105.  
  106.         Node->MenuCode = FULLMENUNUM(Count,NOITEM,NOSUB);
  107.  
  108.         if(Menu->FirstItem)
  109.             LTP_FillItem(Count,Menu->FirstItem);
  110.  
  111.         Count++;
  112.     }
  113.     while(Menu = Menu->NextMenu);
  114. }
  115.  
  116. #endif    /* DO_MENUS */
  117.